﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ZOVNP.Model.Abstracts
{
    /// <summary> Интерфейс провайдера безопасности для СкифБП. </summary>
    /// <remarks> Провайдер безопасности хранит сведения о разрешениях и лицензиях. </remarks>
    public interface IZOVNPSecurityProvider
    {

        #region Свойства

        /// <summary> Имеет ли пользователь право создавать логины. </summary>
        /// <remarks> Это зависит от прав текущего пользователя. </remarks>
        bool CanCreateLogin { get; }
        
        /// <summary> Имеет ли пользователь право создавать пользователей. </summary>
        /// <remarks> Это зависит от прав текущего пользователя. </remarks>
        bool CanCreateUser { get; }

        /// <summary> Имеет ли пользователь право удалять пользователей. </summary>
        /// <remarks> Это зависит от прав текущего пользователя. </remarks>
        bool CanDeleteUser { get; }

        #endregion

        #region Методы

        /// <summary> Создание нового логина. </summary>
        /// <param name="Login"> Имя логина. </param>
        /// <param name="Password"> Пароль для логина. </param>
        /// <param name="IsSql"> True, если логин является Sql логином, иначе false. </param>
        /// <param name="MustChange"> True, если пользователь должен сменить пароль при первом подключении к системе. </param>
        bool CreateLogin(string Login, string Password, bool IsSql, bool MustChange);

        /// <summary> Создание нового пользователя. </summary>
        /// <param name="UserID"> Идентификатор пользователя. </param>
        /// <param name="PrincipalName"> Имя пользователя в БД. </param>
        /// <param name="LoginName"> Логин пользователя на сервере. </param>
        /// <param name="Name"> Отображаемое имя пользователя. </param>
        /// <param name="FirstName"> Имя пользователя. </param>
        /// <param name="SecondName"> Отчество пользователя. </param>
        /// <param name="LastName"> Фамилия пользователя. </param>
        /// <param name="Job"> Должность пользователя. </param>
        /// <param name="Room"> Номер комнаты пользователя. </param>
        /// <param name="Phone"> Телефон пользователя. </param>
        /// <param name="EMail"> Адрес электронной почты. </param>
        bool CreateUser(out Guid UserID, string PrincipalName, string LoginName, string Name, string FirstName = null, string SecondName = null,
            string LastName = null, string Job = null, string Room = null, string Phone = null, string EMail = null);

        /// <summary> Удалить пользователя. </summary>
        /// <param name="UserID"> Идентификатор пользователя. </param>
        /// <returns> </returns>
        bool DeleteUser(Guid UserID);
        
        #endregion

    }
}
